package leetcode_41_60;

public class rotate_48 {
    /**
     * 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。
     * 你必须在 原地 旋转图像，需要直接修改输入的二维矩阵。
     *
     * 第一次自己写出来0ms  100%
     * @param matrix
     */
    public void rotate(int[][] matrix) {
        /*
        有了一点思路，要求原地修改，可以取出矩阵的1/4进行循环遍历
        一个修改四个旋转相关的元素
         */
        int row=0,column=0,m=0,n=0;
        //遍历左上角四分之一元素即可
        if((matrix.length)%2==0) //行数为偶数
            m=n=matrix.length/2-1;
        else{
            m=matrix.length/2;
            n=m-1;
        }
        for(int i=0;i<=m;i++){
            for(int j=0;j<=n;j++){
                //左上去右上  , 列变成之前的行，行变成（矩阵的列数-之前的行）注意坐标从0开始
                //其他三部操作都是共性
                int r_index = j, c_index = matrix.length - 1 - i;  //下一个位置坐标
                int last_num=matrix[i][j] ;
                int next_num = matrix[r_index][c_index];      //保存将要被替换位置的数
                matrix[r_index][c_index] = last_num;        //替换
                for (int t=0;t<3;t++){
                    int temp = r_index;
                    r_index = c_index;
                    c_index = matrix.length - 1 - temp;     //坐标计算
                    last_num=next_num;
                    next_num=matrix[r_index][c_index]; //将被替换位置的数保存到下个循环
                    matrix[r_index][c_index] = last_num;//替换
                }
            }
        }
    }
}
